/**
 * 微信小程序Worker专用API兼容性处理工具
 * 用于解决Worker环境中API不兼容问题
 */

// 空函数，用于拦截不支持的API调用
const noop = function() {
  return Promise.resolve({errMsg: 'ok'});
};

/**
 * 检查是否在Worker环境中
 */
function isWorkerEnvironment() {
  return typeof self !== 'undefined' && 
         typeof WorkerGlobalScope !== 'undefined' && 
         self instanceof WorkerGlobalScope;
}

/**
 * 修复Worker环境中reportRealtimeAction不支持的问题
 */
function fixReportRealtimeAction() {
  if (!isWorkerEnvironment()) {
    return;
  }
  
  try {
    if (typeof self.wx === 'undefined') {
      // 如果Worker中没有wx对象，则创建一个基本的
      self.wx = {};
    }
    
    // 添加或替换reportRealtimeAction方法
    self.wx.reportRealtimeAction = function(name, data) {
      // 在Worker中简单返回成功，避免错误
      return Promise.resolve({errMsg: 'reportRealtimeAction:ok'});
    };
    
    console.log('Worker环境中的reportRealtimeAction已修复');
  } catch (e) {
    console.error('修复Worker环境中的reportRealtimeAction失败', e);
  }
}

/**
 * 修复其他常见的Worker环境API问题
 */
function fixOtherWorkerAPIs() {
  if (!isWorkerEnvironment()) {
    return;
  }
  
  try {
    if (typeof self.wx === 'undefined') {
      self.wx = {};
    }
    
    // 添加常用的可能缺失的API
    const missingAPIs = [
      'reportAnalytics',
      'reportPerformance',
      'setStorage',
      'getStorage',
      'removeStorage',
      'clearStorage'
    ];
    
    missingAPIs.forEach(api => {
      if (typeof self.wx[api] === 'undefined') {
        self.wx[api] = noop;
      }
    });
    
    console.log('Worker环境中的其他API已修复');
  } catch (e) {
    console.error('修复Worker环境中的其他API失败', e);
  }
}

/**
 * 添加全局错误处理
 */
function setupWorkerErrorHandling() {
  if (!isWorkerEnvironment()) {
    return;
  }
  
  try {
    // 全局错误监听
    self.addEventListener('error', function(event) {
      const errorMsg = event.message || '';
      
      // 过滤API不支持的错误
      if (errorMsg.includes('reportRealtimeAction') || 
          errorMsg.includes('not support')) {
        console.log('Worker中已忽略错误:', errorMsg);
        event.preventDefault();
        return;
      }
      
      // 其他错误正常处理
      console.error('Worker错误:', errorMsg);
    });
    
    // 未处理的Promise异常
    self.addEventListener('unhandledrejection', function(event) {
      const reason = event.reason;
      
      if (reason && typeof reason === 'string' && 
         (reason.includes('reportRealtimeAction') || 
          reason.includes('not support'))) {
        console.log('Worker中已忽略Promise异常:', reason);
        event.preventDefault();
        return;
      }
      
      console.error('Worker未处理的Promise异常:', reason);
    });
    
    console.log('Worker环境错误处理已设置');
  } catch (e) {
    console.error('设置Worker环境错误处理失败', e);
  }
}

/**
 * 运行所有Worker环境修复
 */
function runAllFixes() {
  if (!isWorkerEnvironment()) {
    console.log('非Worker环境，无需应用修复');
    return;
  }
  
  try {
    fixReportRealtimeAction();
    fixOtherWorkerAPIs();
    setupWorkerErrorHandling();
    console.log('所有Worker环境API兼容性修复已应用');
  } catch (e) {
    console.error('应用Worker环境修复失败', e);
  }
}

// 自动运行所有修复
runAllFixes();

// 导出API供外部使用
module.exports = {
  isWorkerEnvironment,
  fixReportRealtimeAction,
  fixOtherWorkerAPIs,
  setupWorkerErrorHandling,
  runAllFixes
}; 